
#ifndef _WEBSOCKET_COMMON_H_
#define _WEBSOCKET_COMMON_H_

#include <stdbool.h>
#include <sys/types.h>

// #define WEBSOCKET_DEBUG
#define     EPOLL_RESPOND_NUM		10000	// epoll最大同时管理句柄数量
#define     RECV_BYTE_LEN               32768   //接收缓存容量 32KB  UDP包最大64KB,互联网时建议512B


#ifdef __cplusplus
extern "C"  //C++
{
#endif
/*动态缓存*/
typedef struct DynBuf{
    int count;//使用
    int capacity;//缓冲区长度
    unsigned char *data;//缓冲区指针
}DynBuf;

// websocket根据data[0]判别数据包类型    比如0x81 = 0x80 | 0x1 为一个txt类型数据包
typedef enum{
    WDT_MINDATA = -20,      // 0x0：标识一个中间数据包
    WDT_TXTDATA = -19,      // 0x1：标识一个txt类型数据包
    WDT_BINDATA = -18,      // 0x2：标识一个bin类型数据包
    WDT_DISCONN = -17,      // 0x8：标识一个断开连接类型数据包
    WDT_PING = -16,     // 0x8：标识一个断开连接类型数据包
    WDT_PONG = -15,     // 0xA：表示一个pong类型数据包
    WDT_ERR = -1,
    WDT_NULL = 0
}WebsocketData_Type;


int webSocket_send(int fd, char *data, int dataLen, bool isMask, WebsocketData_Type type);
int webSocket_delayms(unsigned int ms);//正数ok 0超时 -1出错

// 其它工具
int websocket_getIpByHostName(char *hostName, char *backIp);//域名转 IP
int netCheck_setIP(char *devName, char *ip);
void netCheck_getIP(char *devName, char *ip);//设置和获取本机IP  *devName设备名称如: eth0
int websocket_base64_decode( const char *base64, unsigned char *bindata);//base64解码
int websocket_base64_encode( const unsigned char *bindata, char *base64, int binlength);//base64编码
//生成UUID
char *random_uuid(char buf[37]);

//回调事件
typedef int (*CallBackFun)(int fd,WebsocketData_Type datatype, char *buf, unsigned int bufLen);
//通道非正常关闭发生
typedef int (*CallCloseedFun)(int fd);

int server_init(int port,CallBackFun *server_callBack,CallCloseedFun *server_callCloseed);
//客户
int  client_init(char *ip, int port, char *interface_path,CallBackFun *client_callBack,CallCloseedFun *client_callCloseed);


#ifdef __cplusplus
}
#endif

#endif

